#ifndef UNITCONVERSIONDIALOG_H
#define UNITCONVERSIONDIALOG_H

#include <QDialog>
#include "CoordinateAxisItem.h"

namespace Ui {
class UnitConversionDialog;
}

class UnitConversionDialog : public QDialog
{
    Q_OBJECT

public:
    explicit UnitConversionDialog(QWidget *parent = nullptr);
    ~UnitConversionDialog();

    // 设置各单位的转换比例
    void setLengthRatio(double ratio);
    void setTimeRatio(double ratio);
    void setWavelengthRatio(double ratio);
    
    // 获取设置的各单位转换比例
    double getLengthRatio() const;
    double getTimeRatio() const;
    double getWavelengthRatio() const;
    
    // 获取设置的单位
    QString getLengthUnit() const;
    QString getTimeUnit() const;
    QString getWavelengthUnit() const;
    
    // 设置单位
    void setLengthUnit(const QString &unit);
    void setTimeUnit(const QString &unit);
    void setWavelengthUnit(const QString &unit);

    signals:
    // 转换比例变化信号
    void conversionRatiosChanged(double lengthRatio, double timeRatio, double wavelengthRatio);
    
    // 单位变化信号
    void unitsChanged(const QString &lengthUnit, const QString &timeUnit, const QString &wavelengthUnit);

private slots:
    void on_okButton_clicked();
    void on_cancelButton_clicked();
    
    // 处理单位变化的槽函数
    void on_lengthUnitComboBox_currentIndexChanged(const QString &unit);
    void on_timeUnitComboBox_currentIndexChanged(const QString &unit);
    void on_wavelengthUnitComboBox_currentIndexChanged(const QString &unit);

private:
    Ui::UnitConversionDialog *ui;
    
    // 保存当前选择的单位，用于单位切换时的比例换算
    QString m_currentLengthUnit;
    QString m_currentTimeUnit;
    QString m_currentWavelengthUnit;
    
    // 验证输入是否为有效的数字
    bool isValidNumber(const QString &text, double &value) const;
    
    // 单位转换因子（从基本单位到所选单位）
    double getUnitConversionFactor(const QString &unitType, const QString &unit) const;
    
    // 计算从一个单位到另一个单位的转换因子
    double getConversionFactorBetweenUnits(const QString &unitType, const QString &fromUnit, const QString &toUnit) const;
};

#endif // UNITCONVERSIONDIALOG_H